package com.ys.day30.p2注解与反射;

import com.ys.day30.p1回顾升级.ReflectUtils;
import org.junit.Test;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 描述:
 *
 *  * 对Student所有属性进行暴力破解
 *  * 步骤：
 *  * 1 定义Map集合，存储Student所有的属性名称和属性值
 *  * 2 调用工具方法使用反射创建Student对象
 *  * 3 调用工具方法暴力破解
 * @author CodeYang
 * @version 2021/1/12 19:28
 */
public class P1ReflectTest {

    /**
     *  静态map 在类加载时创建,
     *  ConcurrentHashMap在多线程情况下建议使用 ConcurrentHashMap 比 HashMap 跟安全
     */
    private static Map<String,Object> map = new ConcurrentHashMap<>(16);

    /**
     *  静态代码块,在类加载时执行
     */
    static {
        map.put("id",50123);
        map.put("name","jimshj");
        map.put("love","make is seeing ");
    }

    /**
     *  暴力破解测试+ 注解配合 ,只破解 非只读的属性
     */
    @Test
    public void Test01(){

        try {

            Student student = ReflectUtils.creteObject(Student.class);
            System.out.println("before--->"+student);
            ReflectUtils.accessAllFiledsTwo(student,map);
            System.out.println("after---->"+student);

            /**
             * 可以发现 因为 实体类里 id的 注解配合设置为了只读就 id就没修改
             * before--->Student{id=10001, name='jim', love='打球'}
             * after---->Student{id=10001, name='jimshj', love='make is seeing '}
             *
             */
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}
